package controlador;
import java.awt.event.*;
import java.io.IOException;
import javax.swing.event.*;
import javax.swing.*;

import negModel.*;
import negModelExcep.eSinFondos;
import vista.Mensajes;

public class ControladorVistaTaller {
	private ControladorDeVentanas contVent;
	private Taller taller;
	private CargarModelo modelo=new CargarModelo();
	private Mensajes mens=new Mensajes();

	

	public ControladorVistaTaller (ControladorDeVentanas contVent){
	this.contVent=contVent;
	try {
		this.taller = Taller.cargar("Taller.xml");
	} catch (IOException e) {
		e.printStackTrace();
	} catch (ClassNotFoundException e) {
		e.printStackTrace();
	}
	
	}

	private class EscuchaBotonComercio implements ActionListener
	{	public void actionPerformed(ActionEvent e)
		{
		contVent.AbrirVentanaComercio();
		contVent.ActualizarVistaComercioPartesComprar();
		contVent.ActualizarDinero();
		contVent.OcultarVentanaTaller();
		}
	}

	public ActionListener getListenerBotonComercio() {
		return new EscuchaBotonComercio();
	}
	

	private class EscuchaBotonSalir implements ActionListener
	{	public void actionPerformed(ActionEvent e)
		{
		if(mens.deseaSalir()==0)
					System.exit(0);
		}
	}

	public ActionListener getListenerBotonSalir() {
		return new EscuchaBotonSalir();
	}
	

	private class EscuchaBotonVolver implements ActionListener
	{	public void actionPerformed(ActionEvent e)
		{
		if (mens.deseaVolver()==0){
			contVent.AbrirVentanaMenuPrincipal();
			contVent.OcultarVentanaTaller();
			}
		}
	}

	public ActionListener getListenerBotonVolver() {
		return new EscuchaBotonVolver();
	}

	
	private class EscuchaBotonRepararParte implements ActionListener
	{	public void actionPerformed(ActionEvent e)
		{
			int indice=contVent.ObtenerIndicePartes();
			if (indice!=-1){
				Parte parte;
				ListaPartes lp=contVent.ObtenerJugador().getVehiculo().mostrarPartes();
				parte=lp.devolverunaParte(indice);
				try {
					contVent.ObtenerJugador().pagar(taller.evaluarCostoDeArreglo(parte).getMonto());
					contVent.ActualizarDinero();
					taller.arreglarParte(parte);
					mens.parteReparada (parte.getDetalle());
				} catch (eSinFondos e1) {
					mens.sinFondos();
				}
				
				
			}
			else
				mens.sinSeleccionPartes();
		}
	}

	public ActionListener getListenerBotonRepararParte() {
		return new EscuchaBotonRepararParte();
	}
	
	private class EscuchaBotonRepararTodo implements ActionListener
	{	public void actionPerformed(ActionEvent e)
		{
			Auto auto=(Auto)contVent.ObtenerJugador().getVehiculo();
			try {
				contVent.ObtenerJugador().pagar(taller.evaluarCostoDeArregloTotal(auto).getMonto());
				contVent.ActualizarDinero();
				taller.arreglarPartes(auto);
				mens.partesReparadas();
			} catch (eSinFondos e1) {
				mens.sinFondos();
			}
			
			
		}
	}

	public ActionListener getListenerBotonRepararTodo() {
		return new EscuchaBotonRepararTodo();
	}

	private class EscuchaBotonCambiarParte implements ActionListener
	{	public void actionPerformed(ActionEvent e)
		{
			contVent.ActualizarListaPartesNuevas();
			contVent.ActualizarListaPartesUsadas();
			contVent.AbrirVentanaCambiarPartes();
			contVent.OcultarVentanaTaller();
		}
	}

	public ActionListener getListenerBotonCambiarParte() {
		return new EscuchaBotonCambiarParte();
	}
	
	private class EscuchaBotonCarrera implements ActionListener
	{	public void actionPerformed(ActionEvent e)
		{
				contVent.AbrirVentanaPistaOponente();
				contVent.ActualizarListasPistaOponentes();
				contVent.OcultarVentanaTaller();
		}
	}

	public ActionListener getListenerBotonCarrera() {
		return new EscuchaBotonCarrera();
	}

	private class EscuchaListaAutos implements ListSelectionListener
	{	public void valueChanged(ListSelectionEvent evt)
		{
	    	int indice=contVent.ObtenerIndiceAutos();
	       	if (indice>=0){
	    		ListaVehiculos lv=contVent.ObtenerJugador().mostrarVehiculos();
	    		contVent.ObtenerJugador().SetVehiculo((Auto)lv.get(indice));
	    		contVent.ActualizarVistaTallerPartes();
	    	}
		}
	}

	public ListSelectionListener getListenerListaAutos() {
		return new EscuchaListaAutos();
	}
	
	private class EscuchaBotonEstadoPartes implements ActionListener
	{	public void actionPerformed(ActionEvent e)
		{
			contVent.ActualizarEstadoPartes();
			contVent.AbrirVentanaEstadoPartes();
			contVent.OcultarVentanaTaller();
		}
	}

	public ActionListener getListenerBotonEstadoPartes() {
		return new EscuchaBotonEstadoPartes();
	}
	
	private class EscuchaBotonCargarCombustible implements ActionListener
	{	public void actionPerformed(ActionEvent e)
		{
			Auto unAuto=(Auto)contVent.ObtenerJugador().getVehiculo();
			try {
				contVent.ObtenerJugador().pagar(unAuto.CargarCombustible().getMonto());
				contVent.ActualizarDinero();
				mens.tanqueLleno();
			} catch (eSinFondos e1) {
				mens.sinFondos();
			}
		}
	}

	public ActionListener getListenerBotonCargarCombustible() {
		return new EscuchaBotonCargarCombustible();
	}

		
	public DefaultListModel CargarModeloAuto (){
		return modelo.CargarModeloAuto(contVent.ObtenerJugador().mostrarVehiculos());
	}
	
	public DefaultListModel CargarModeloPartes (){
		return modelo.CargarModeloPartes(contVent.ObtenerJugador().getVehiculo().mostrarPartes());
				
	}
	
	public Taller DevolverTaller (){
		return taller;
	}
	

}
